package Network;

import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import taskmanager.ITaskManager;

/**
 * Данный интерфейс представляет из себя перечисления сервисов предоставляемых ведомым сервером
 * серверу арбитру
 * @author Volk ID = 1001
 */
public interface ISlaveServer extends INetworkRetryInterface, IModeWork,
        ISlaveTaskManager{
    
  /**
  * Проверяет запрос об сетевой активности сервера
  * @throws java.rmi.RemoteException - сервер не доступен
  */
  public void ping() throws RemoteException;


  /**
   * Запрос о том, может ли запрашиваемый сервер стать подчинённым
   * @param IP - IP-адресс сервера инициировавшего запрос
   * @param port - номер порта сервера инициировавшего запрос
   * @return идентитикатор сервера, -1 подключение невозможно
   * @throws java.rmi.RemoteException - разрыв соединения
   * @throws MalformedURLException - неверный IP - адресс обратная связь не возможно
   * @throws  NotBoundException - отсутсвует заглушка арбитра на инициирующей стороне - связь не возможна
  */
   public long connect(String IP,int port) throws RemoteException, MalformedURLException, NotBoundException;

   /**
    * Получить режим работы удалённого сервера
    * @throws RemoteException - разрыв соединения
    * @return режим работы удалённого сервера
    */
   public int getMode() throws RemoteException;

   /**
    * Удалить сервер из сети
    * @throws java.rmi.RemoteException разрыв соединения
    * @throws IOException конфигурационные файлы сети недоступны
    */
   public void remove() throws RemoteException, IOException;


   /**
    * Получить уникальный идентификатор сервера
    * @return уникальный идентификатор сервера
    * @throws RemoteException разрыв соединения
   */
   public long getGUID() throws RemoteException;

   /**
    * Проверить находился ли сервер в сети в момент запуска
    * @return 0 - сервер не был подключен, иначе количество соединений перед бесперебойной работой
    * @throws java.rmi.RemoteException разрыв соединения с сервером
   */
   public int isInNet() throws RemoteException;
}
